MPT-20330: Added endpoints and e2e tests for program terms variants#314
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository YAML (base), Organization UI (inherited) Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
✅ Files skipped from review due to trivial changes (3)
🚧 Files skipped from review as they are similar to previous changes (3)
📝 WalkthroughWalkthroughAdds TermVariant model and sync/async services, exposes .variants(term_id) on TermService/AsyncTermService, updates E2E config with a variant id, and introduces unit and E2E tests covering variant lifecycle and publish/unpublish behavior. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
f763bef to
4fde121
Compare
|
Bumps the python-development group with 4 updates: [mypy](https://github.com/python/mypy), [pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures), [ruff](https://github.com/astral-sh/ruff) and [types-python-dateutil](https://github.com/python/typeshed). Updates `mypy` from 2.0.0 to 2.1.0 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/python/mypy/blob/master/CHANGELOG.md">mypy's changelog</a>.</em></p> <blockquote> <h1>Mypy Release Notes</h1> <h2>Next Release</h2> <h2>Mypy 2.1</h2> <p>We’ve just uploaded mypy 2.1.0 to the Python Package Index (<a href="https://pypi.org/project/mypy/">PyPI</a>). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:</p> <pre><code>python3 -m pip install -U mypy </code></pre> <p>You can read the full documentation for this release on <a href="http://mypy.readthedocs.io">Read the Docs</a>.</p> <h3>librt.vecs: Fast Growable Array Type for Mypyc</h3> <p>The new <code>librt.vecs</code> module provides an efficient growable array type <code>vec</code> that is optimized for mypyc use. It provides fast, packed arrays with integer and floating point value types, which can be <strong>several times faster</strong> than <code>list</code>, and tens of times faster than <code>array.array</code> in code compiled using mypyc. It also supports nested <code>vec</code> objects and non-value-type items, such as <code>vec[vec[str]]</code>.</p> <p>Refer to the <a href="https://mypyc.readthedocs.io/en/latest/librt_vecs.html">documentation</a> for the details.</p> <p>Contributed by Jukka Lehtosalo.</p> <h3>librt.random: Fast Pseudo-Random Number Generation</h3> <p>The new <code>librt.random</code> module provides fast pseudo-random number generation that is optimized for code compiled using mypyc. It can be 3x to 10x faster than the stdlib <code>random</code> module in compiled code.</p> <p>Refer to the <a href="https://mypyc.readthedocs.io/en/latest/librt_random.html">documentation</a> for the details.</p> <p>Contributed by Jukka Lehtosalo (PR <a href="https://redirect.github.com/python/mypy/pull/21433">21433</a>).</p> <h3>Mypyc Improvements</h3> <ul> <li>Make compilation order with multiple files consistent (Piotr Sawicki, PR <a href="https://redirect.github.com/python/mypy/pull/21419">21419</a>)</li> <li>Fix crash on accessing <code>StopAsyncIteration</code> (Piotr Sawicki, PR <a href="https://redirect.github.com/python/mypy/pull/21406">21406</a>)</li> <li>Fix incremental compilation with <code>separate</code> flag (Vaggelis Danias, PR <a href="https://redirect.github.com/python/mypy/pull/21299">21299</a>)</li> </ul> <h3>Fixes to Crashes</h3> <ul> <li>Fix crash on partial type with <code>--allow-redefinition</code> and <code>global</code> declaration (Jukka Lehtosalo, PR <a href="https://redirect.github.com/python/mypy/pull/21428">21428</a>)</li> <li>Fix broken awaitable generator patching (Ivan Levkivskyi, PR <a href="https://redirect.github.com/python/mypy/pull/21435">21435</a>)</li> </ul> <h3>Changes to Messages</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/python/mypy/commit/c1c336d7e34eb313080c79b156518c58d27c7234"><code>c1c336d</code></a> Remove +dev from version</li> <li><a href="https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7"><code>74df14b</code></a> Add changelog for mypy 2.1 (<a href="https://redirect.github.com/python/mypy/issues/21464">#21464</a>)</li> <li><a href="https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff"><code>022d9bc</code></a> Revert "TypeForm: Enable by default (<a href="https://redirect.github.com/python/mypy/issues/21262">#21262</a>)"</li> <li><a href="https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c"><code>8826288</code></a> [mypyc] Document librt.random (<a href="https://redirect.github.com/python/mypy/issues/21463">#21463</a>)</li> <li><a href="https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96"><code>3f4067b</code></a> Bump librt version to 0.11.0 (<a href="https://redirect.github.com/python/mypy/issues/21458">#21458</a>)</li> <li><a href="https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e"><code>2b1eb58</code></a> [mypyc] Enable incremental self-compilation (<a href="https://redirect.github.com/python/mypy/issues/21369">#21369</a>)</li> <li><a href="https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc"><code>8152f4a</code></a> Respect file config comments for stale modules (<a href="https://redirect.github.com/python/mypy/issues/21444">#21444</a>)</li> <li><a href="https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92"><code>116d60b</code></a> Fix nondeterminism from nonassociativity of overload joins (<a href="https://redirect.github.com/python/mypy/issues/21455">#21455</a>)</li> <li><a href="https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210"><code>6c4af8e</code></a> Fix function call message change for small number of args (<a href="https://redirect.github.com/python/mypy/issues/21432">#21432</a>)</li> <li><a href="https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800"><code>4b8fdca</code></a> [mypyc] Add librt.random module (<a href="https://redirect.github.com/python/mypy/issues/21433">#21433</a>)</li> <li>Additional commits viewable in <a href="https://github.com/python/mypy/compare/v2.0.0...v2.1.0">compare view</a></li> </ul> </details> <br /> Updates `pytest-rerunfailures` from 16.1 to 16.2 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst">pytest-rerunfailures's changelog</a>.</em></p> <blockquote> <h2>16.2 (2026-05-13)</h2> <p>Breaking changes ++++++++++++++++</p> <ul> <li>Drop support for pytest 8.0. Minimum pytest version is now 8.1.</li> </ul> <p>Features ++++++++</p> <ul> <li>Add support for pytest 9.0.</li> </ul> <p>Bug fixes +++++++++</p> <ul> <li> <p>Fix missing teardown for session and module scoped fixtures when fixture teardown fails. Fixes <code>[#314](pytest-dev/pytest-rerunfailures#314) <https://github.com/pytest-dev/pytest-rerunfailures/issues/314></code>_.</p> </li> <li> <p>Clear fixture finalizers when removing cached results from failed fixtures to fix compatibility with pytest >= 9, which asserts that <code>_finalizers</code> is empty before executing a fixture. Fixes <code>[#323](pytest-dev/pytest-rerunfailures#323) <https://github.com/pytest-dev/pytest-rerunfailures/issues/323></code>_.</p> </li> <li> <p>Accept exception classes (not only regex strings) in the <code>only_rerun</code> and <code>rerun_except</code> marker keyword arguments instead of crashing with an internal error. Fixes <code>[#275](pytest-dev/pytest-rerunfailures#275) <https://github.com/pytest-dev/pytest-rerunfailures/issues/275></code>_.</p> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/88a84d8471219ae517dfd3752a181b22e51a2b8c"><code>88a84d8</code></a> Preparing release 16.2</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/5e0ad6a3080d778f2d3de8975aceafed0c843b12"><code>5e0ad6a</code></a> fix: accept exception classes in only_rerun and rerun_except markers (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/327">#327</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/928aa2bb654b18157e6614c15f22091e9997d540"><code>928aa2b</code></a> Update minimum pytest version to 8.1 and add support for pytest 9.0 (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/325">#325</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/b53ef720219427c569bddee7e37d92cc3423e2c9"><code>b53ef72</code></a> Fix support for pytest-main. (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/324">#324</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/d9ef70e5451f604dcc764861f4b0a65dc9dfd202"><code>d9ef70e</code></a> Preserve session and module teardown when fixture teardown fails (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/319">#319</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/a22edc3de88eeb17f3dcdf482b3f5a13ea9af874"><code>a22edc3</code></a> Bump actions/cache from 4 to 5 in the actions group (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/317">#317</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/365dc54ba3069f55a870cda2c3e1e3c33c68f326"><code>365dc54</code></a> Bump actions/checkout from 5 to 6 in the actions group (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/316">#316</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/a484d569b55875c827f091c5f17b9087ab9169d9"><code>a484d56</code></a> Update to current versions of pre-commit hooks. (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/312">#312</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/3447ea8684e5b74656f0a2d6b3de34b046bab0ce"><code>3447ea8</code></a> Back to development: 16.2</li> <li>See full diff in <a href="https://github.com/pytest-dev/pytest-rerunfailures/compare/16.1...16.2">compare view</a></li> </ul> </details> <br /> Updates `ruff` from 0.15.12 to 0.15.13 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/releases">ruff's releases</a>.</em></p> <blockquote> <h2>0.15.13</h2> <h2>Release Notes</h2> <p>Released on 2026-05-14.</p> <h3>Preview features</h3> <ul> <li>Add a rule to flag lazy imports that are eagerly evaluated (<a href="https://redirect.github.com/astral-sh/ruff/pull/25016">#25016</a>)</li> <li>[<code>pylint</code>] Standardize diagnostic message (<code>PLR0914</code>, <code>PLR0917</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/24996">#24996</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Fix <code>F811</code> false positive for class methods (<a href="https://redirect.github.com/astral-sh/ruff/pull/24933">#24933</a>)</li> <li>Fix setting selection for multi-folder workspace (<a href="https://redirect.github.com/astral-sh/ruff/pull/24819">#24819</a>)</li> <li>[<code>eradicate</code>] Fix false positive for lines with leading whitespace (<code>ERA001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25122">#25122</a>)</li> <li>[<code>flake8-pyi</code>] Fix false positive for f-string debug specifier (<code>PYI016</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/24098">#24098</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>Always include panic payload in panic diagnostic message (<a href="https://redirect.github.com/astral-sh/ruff/pull/24873">#24873</a>)</li> <li>Restrict <code>PYI034</code> for in-place operations to enclosing class (<a href="https://redirect.github.com/astral-sh/ruff/pull/24511">#24511</a>)</li> <li>Improve error message for parameters that are declared <code>global</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/24902">#24902</a>)</li> <li>Update known stdlib (<a href="https://redirect.github.com/astral-sh/ruff/pull/25103">#25103</a>)</li> </ul> <h3>Performance</h3> <ul> <li>[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s for literal known modules (<a href="https://redirect.github.com/astral-sh/ruff/pull/25123">#25123</a>)</li> </ul> <h3>CLI</h3> <ul> <li>Add TOML examples to <code>--config</code> help text (<a href="https://redirect.github.com/astral-sh/ruff/pull/25013">#25013</a>)</li> <li>Colorize ruff check 'All checks passed' (<a href="https://redirect.github.com/astral-sh/ruff/pull/25085">#25085</a>)</li> </ul> <h3>Configuration</h3> <ul> <li>Increase max allowed value of <code>line-length</code> setting (<a href="https://redirect.github.com/astral-sh/ruff/pull/24962">#24962</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Add <code>D203</code> to rules that conflict with the formatter (<a href="https://redirect.github.com/astral-sh/ruff/pull/25044">#25044</a>)</li> <li>Clarify <code>COM819</code> and formatter interaction (<a href="https://redirect.github.com/astral-sh/ruff/pull/25045">#25045</a>)</li> <li>Clarify that <code>NotImplemented</code> is a value, not an exception (<code>F901</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25054">#25054</a>)</li> <li>Update number of lint rules supported (<a href="https://redirect.github.com/astral-sh/ruff/pull/24942">#24942</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Simplify the playground's markdown template (<a href="https://redirect.github.com/astral-sh/ruff/pull/24924">#24924</a>)</li> </ul> <h3>Contributors</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's changelog</a>.</em></p> <blockquote> <h2>0.15.13</h2> <p>Released on 2026-05-14.</p> <h3>Preview features</h3> <ul> <li>Add a rule to flag lazy imports that are eagerly evaluated (<a href="https://redirect.github.com/astral-sh/ruff/pull/25016">#25016</a>)</li> <li>[<code>pylint</code>] Standardize diagnostic message (<code>PLR0914</code>, <code>PLR0917</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/24996">#24996</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Fix <code>F811</code> false positive for class methods (<a href="https://redirect.github.com/astral-sh/ruff/pull/24933">#24933</a>)</li> <li>Fix setting selection for multi-folder workspace (<a href="https://redirect.github.com/astral-sh/ruff/pull/24819">#24819</a>)</li> <li>[<code>eradicate</code>] Fix false positive for lines with leading whitespace (<code>ERA001</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25122">#25122</a>)</li> <li>[<code>flake8-pyi</code>] Fix false positive for f-string debug specifier (<code>PYI016</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/24098">#24098</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>Always include panic payload in panic diagnostic message (<a href="https://redirect.github.com/astral-sh/ruff/pull/24873">#24873</a>)</li> <li>Restrict <code>PYI034</code> for in-place operations to enclosing class (<a href="https://redirect.github.com/astral-sh/ruff/pull/24511">#24511</a>)</li> <li>Improve error message for parameters that are declared <code>global</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/24902">#24902</a>)</li> <li>Update known stdlib (<a href="https://redirect.github.com/astral-sh/ruff/pull/25103">#25103</a>)</li> </ul> <h3>Performance</h3> <ul> <li>[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s for literal known modules (<a href="https://redirect.github.com/astral-sh/ruff/pull/25123">#25123</a>)</li> </ul> <h3>CLI</h3> <ul> <li>Add TOML examples to <code>--config</code> help text (<a href="https://redirect.github.com/astral-sh/ruff/pull/25013">#25013</a>)</li> <li>Colorize ruff check 'All checks passed' (<a href="https://redirect.github.com/astral-sh/ruff/pull/25085">#25085</a>)</li> </ul> <h3>Configuration</h3> <ul> <li>Increase max allowed value of <code>line-length</code> setting (<a href="https://redirect.github.com/astral-sh/ruff/pull/24962">#24962</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Add <code>D203</code> to rules that conflict with the formatter (<a href="https://redirect.github.com/astral-sh/ruff/pull/25044">#25044</a>)</li> <li>Clarify <code>COM819</code> and formatter interaction (<a href="https://redirect.github.com/astral-sh/ruff/pull/25045">#25045</a>)</li> <li>Clarify that <code>NotImplemented</code> is a value, not an exception (<code>F901</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25054">#25054</a>)</li> <li>Update number of lint rules supported (<a href="https://redirect.github.com/astral-sh/ruff/pull/24942">#24942</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Simplify the playground's markdown template (<a href="https://redirect.github.com/astral-sh/ruff/pull/24924">#24924</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/astral-sh/ruff/commit/2afb467ce397e4a89c13a0a814c62cfecb0e9e49"><code>2afb467</code></a> Bump 0.15.13 (<a href="https://redirect.github.com/astral-sh/ruff/issues/25157">#25157</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/300879600fa3af7cde1e675c63de6ad9d0797d1b"><code>3008796</code></a> [ty] classify TypeVar semantic tokens as type parameters (<a href="https://redirect.github.com/astral-sh/ruff/issues/24891">#24891</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/79470e31877acb6074f3bbff2a49e508822ae4e8"><code>79470e3</code></a> [<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s for literal known modules (<a href="https://redirect.github.com/astral-sh/ruff/issues/25123">#25123</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/2522549901d50f18775999f0fb802b19229417f0"><code>2522549</code></a> Remove shellcheck from prek (<a href="https://redirect.github.com/astral-sh/ruff/issues/25154">#25154</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/7db7170020f539d6d2bc01dbd0b0c09fab91dc06"><code>7db7170</code></a> [ty] Support TypedDict key completions in incomplete, anonymous contexts (<a href="https://redirect.github.com/astral-sh/ruff/issues/25">#25</a>...</li> <li><a href="https://github.com/astral-sh/ruff/commit/bb3dd535f1c5a83e2e56ac93a771fadbeeceebd0"><code>bb3dd53</code></a> [ty] Run full iteration analysis on narrowed typevars (<a href="https://redirect.github.com/astral-sh/ruff/issues/25143">#25143</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/828cdb7732efcb16a53f4ee5f011cf653b834d1a"><code>828cdb7</code></a> [ty] Isolate file-watching test environment (<a href="https://redirect.github.com/astral-sh/ruff/issues/25151">#25151</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/89e1d8670ea4d3af60c8143ee552dc750200718d"><code>89e1d86</code></a> [ty] Preserve TypedDict keys through dict unpacking (<a href="https://redirect.github.com/astral-sh/ruff/issues/24523">#24523</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/86f3064d6fffa5697d174f26b840bd6857b381da"><code>86f3064</code></a> [ty] Avoid accessing <code>args[0]</code> for <code>static_assert</code> (<a href="https://redirect.github.com/astral-sh/ruff/issues/25149">#25149</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/ed819f947dc27e36eac8bb3134153c4668d76a3a"><code>ed819f9</code></a> [ty] Treat custom enum <code>__new__</code> values as dynamic (<a href="https://redirect.github.com/astral-sh/ruff/issues/25136">#25136</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/ruff/compare/0.15.12...0.15.13">compare view</a></li> </ul> </details> <br /> Updates `types-python-dateutil` from 2.9.0.20260508 to 2.9.0.20260518 <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/python/typeshed/commits">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details>



This pull request introduces support for managing program term variants in the API client, including both synchronous and asynchronous services, comprehensive unit and end-to-end tests, and updates to test configurations. The changes add the ability to create, update, delete, retrieve, publish, and unpublish term variants, as well as to handle file uploads and online asset URLs.
Program Term Variant Service Implementation:
TermVariantmodel and bothTermVariantService(sync) andAsyncTermVariantService(async) classes inprograms_terms_variant.py, supporting CRUD, file upload/download, and publish/unpublish operations for program term variants.TermServiceandAsyncTermServicevia a.variants(term_id)method, enabling access to term variants from the term services. [1] [2]Testing Enhancements:
test_programs_terms_variant.py, verifying endpoints, methods, and model fields.Configuration and Integration:
e2e_config.test.jsonto include aprogram.terms.variant.idfor use in E2E tests.test_programs_terms.py, ensuring correct service instantiation and endpoint parameter handling. [1] [2]These changes collectively provide a robust foundation for managing program term variants through the API client, with thorough test coverage and seamless integration into existing service structures.
Closes MPT-20330